#============================================
#知识点
#建表
# create table dep(
#      id int,
#      name varchar(20));

#  create table emp1(
#     id int primary key auto_increment,
#     name varchar(20),
#     sex enum("male","female") default "male",
#     age int,
#     dep_id int);

# insert into dep values
#     (200,'技术'),
#     (201,'人力资源'),
#     (202,'销售'),
#     (203, '运营');

# insert into emp1(name,sex,age,dep_id) values
#     ('jason', 'male' ,18,200),
#     ('egon', 'female' ,48,201),
#     ('kevin','male' ,18,201),
#     ('nick', 'male',28,202),
#     ('owen','male' ,18,203),
#      ('jerry','female',18,204);
#============================================
#设置表链接 
# select * from dep,emp1; 笛卡尔积
# select * from dep.emp1 where dep.id = emp1.dep_id;
# MySQL也知道你在后面查询数据过程中肯定会经常用到拼表操作

# 所以特地给你开设了对应的方法
# inner join  内连接
# 1eft join   左连接
# right join  右连接
# union       全连接

# 内连接只拼接俩张共有的数据部分
# select * from dep inner join emp1 on dep.id = emp1.dep_id; 

#左连接 左表全部展示对应的右边没有，就用null顶替
# select * from dep left join emp1 on dep.id = emp1.dep_id; 

#左连接 右表全部展示对应的左边没有，就用null顶替
# select * from dep right join emp1 on dep.id = emp1.dep_id; 

#全连接 左表与右表的数据都展示出来（结合左连接与右连接）
# select * from dep left join emp1 on dep.id = emp1.dep_id
# union
# select * from dep right join emp1 on dep.id = emp1.dep_id; 
#============================================
# 子查询

# 子查询就是我们平时解决问题的思路
# 分步骤解决问题
# 第一步
# 第二步
# 将一个查询语句的结果当做另外-一个查询语句的条件去用

#查询部门是技术或者人力资源的员工信息
# 1先获取部门的id号
# 2再去员工表里面筛选出对应的员工
# select id from dep where name='技术' or name = '人力资源';
# select * from emp1 where dep_id in (200,201);

#简写为select * from emp1 where dep_id in(select id from dep where name='技术' or name = '人力资源');
#============================================
# 总结
# 表的查询结果可以作为其他表的查询条件
# 也可以通过起别名的方式把它作为-一个张虚拟表根其他表关联

# 多表查询就两种方式

# 1.先拼接表再查询

# 2.子查询一步一步来

# select distinct 字段1, 字段2,... from 表名
#   where   分组之前的筛选条件
#   group by 分组条件
#   with rollup 在统计出来的数据最后加一个总和
#   having    分组之后的筛选条件
#   order by   排序字段1 asc,排序字段2 desc
#   1imit 5,5
#============================================
#补充
# 关键字exists(了解)
# 只返回布尔值True Fa]lse
# 返回True的时候外层查询语句执行
# 返回False的时候外层查询语句不再执行
# select * from emp where exists
# (select id from dep where id>3) ;
# select * from emp where exists
# (se1ect id from dep where id>300);
#============================================
# 1面对复杂的查询题目的时候不要捉急sq1语句不要想着一一口气写
# 完分步书写
# 2只要是涉及到多表查询的时候肯定用到联表操作和子查询
# 联表操作你可以无限制的联N多张表
# 将两张表的结果起别名变成了- -张表
# 之后再去另外一张表拼接再起别名
# 再去拼接...
#============================================


